def bubble_sort(lst):
    """
    冒泡排序：比较相邻两个元素大小，并交换
    :param lst:
    :return:
    """
    if not lst or len(lst) < 2:
        return
    for i in range(len(lst)):
        for j in range(len(lst)-i-1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j + 1] = lst[j+1], lst[j]


def bubble_sort_plus(lst):
    """
    改进版本：如果有一轮中没有发生交换，则表示已经有序，直接返回
    :param lst:
    :return:
    """
    if not lst or len(lst) < 2:
        return
    for i in range(len(lst)):
        flag = 1
        for j in range(len(lst)-i-1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j + 1] = lst[j+1], lst[j]
                flag = 0
        if flag:
            break


if __name__ == "__main__":
    lst = [2, 4, 1, 5, 3, 9, 7]
    bubble_sort_plus(lst)
    print(lst)
